const express = require('express');
const os = require('os');

const app = express();
const PORT = 3000;

// SSE 路由
app.get('/sse', (req, res) => {
    // 设置响应头
    res.setHeader('Content-Type', 'text/event-stream');
    res.setHeader('Cache-Control', 'no-cache');
    res.setHeader('Connection', 'keep-alive');

    // 发送初始消息
    res.write('data: 连接已建立\n\n');

    // 每 2 秒发送一次消息
    const intervalId = setInterval(() => {
        const data = { memoryUsage: getMemoryUsage(), message: 'SSE 消息' };
        res.write(`data: ${JSON.stringify(data)}\n\n`);
    }, 300);

    // 客户端关闭连接时清理资源
    req.on('close', () => {
        clearInterval(intervalId);
        res.end();
        console.log('客户端断开连接');
    });
});

// 静态文件服务（可选，用于测试前端页面）
app.use(express.static('public'));

app.listen(PORT, () => {
    console.log(`SSE 服务器运行在 http://localhost:${PORT}`);
});



function getMemoryUsage() {
    // 获取总内存（单位：字节）
    let totalMem = os.totalmem();
    // 获取空闲内存（单位：字节）
    let freeMem = os.freemem();
    // 计算已用内存
    let usedMem = totalMem - freeMem;

    totalMem = (totalMem / 1024 / 1024).toFixed(2);
    usedMem = (usedMem / 1024 / 1024).toFixed(2);
    freeMem = (freeMem / 1024 / 1024).toFixed(2);

    // console.log(`总内存: ${totalMem} MB`);
    // console.log(`已用内存: ${usedMem} MB`);
    // console.log(`空闲内存: ${freeMem} MB`);
    // console.log(`内存使用率: ${((usedMem / totalMem) * 100).toFixed(2)}%`);

    return { totalMem, usedMem, freeMem };
}